package faktorI;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;


public class PomocOSimulatoru extends JDialog{
	private JLabel naslov, slika;
	private JPanel centralnaPloca;
	private JButton prethodno, sledece;
	private int i=0;
	
	static PomocOSimulatoru instanca;
	
	public static PomocOSimulatoru instanca(){
		if(instanca == null) return instanca = new PomocOSimulatoru();
		else return instanca;
	}
	
	public void prikazi(int i){
		this.i=i;
		obrada();
		this.setVisible(true);
	}

	public PomocOSimulatoru() {
		super(FaktorIRadnaPovrs.instanca().dohvatiMenadzera(), "Pomoc", true);
		setSize(1024, 768);
		setLocationRelativeTo(null);
		setResizable(true);
		JPanel ploca = new JPanel();
		slika = new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/sim_help.JPG")));
		ploca.add(slika);
		naslov = new JLabel("Objašnjenja vezana za simulator");
		naslov.setFont(Font.decode("Serif-ITALIC-25"));
		ploca.add(naslov);
		add("North", ploca);
		
		ploca = new JPanel();
		prethodno = new JButton("NAZAD",new ImageIcon(Toolkit.getDefaultToolkit().getImage(
		"files/icons/left.JPG")));
		prethodno.setEnabled(false);
		prethodno.setFont(Font.decode("Arial-BOLDITALIC-20"));
		prethodno.setPreferredSize(new Dimension(250, 50));
		prethodno.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				i--;
				obrada();
			}
		});
		ploca.add(prethodno);
		sledece = new JButton("NAPRED",new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/right.JPG")));
		sledece.setEnabled(false);
		sledece.setFont(Font.decode("Arial-BOLDITALIC-20"));
		sledece.setPreferredSize(new Dimension(250, 50));
		sledece.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				i++;
				obrada();
			}
		});
		ploca.add(sledece);
		
		add("South", ploca);
		centralnaPloca = new JPanel();
		obrada();
		add("Center", centralnaPloca);
		validate();
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				instanca.setVisible(false);
			}
			public void windowClosed(WindowEvent we) {
				instanca.setVisible(false);
			}
		});	
	}

	private void obrada() {
		centralnaPloca.removeAll();
		validate();
		JTextArea jta;
		switch (i) {
		case 0:
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
			.setText("                                           UVOD U SIMULATOR:                                     \n" +
					 "\n1)U situacijama kada ekspertski sistem radi u neizvesnom okruženju, ne zadovoljava" +
					 "\nkarakterisanje činjenica i zaključaka samo kao tačnih ili netačnih. Jedno od rešenja ovoga" +
					 "\nproblema je karakterisanje svake činjenice i zaključka faktorom izvesnosti (engl. certainity" +
					 "\nfaktor, CF) koji predstavlja racionalan broj u intervalu" +
					 "\n-1 <= CF <= 1." +
					 
					 "\n\n2)Vrednost -1 za neku činjenicu predstavlja potpuno odsustvo poverenja u datu činjenicu, dok" +
					 "\nvrednost 1 predstavlja potpuno poverenje u nju. Ostale vrednosti predstavljaju veći ili manji" +
					 "\nstepen (ne)poverenja u datu činjenicu, npr. CF = 0 označava da se data činjenica ne može ni" +
					 "\npotvrditi niti opovrgnuti. Faktor izvesnosti se izražava kao razlika mere poverenja (engl." +
					 "\nmeasure of belief, MB) i mere nepoverenja (engl. measure of disbelief, MD):" +
					 "\nCF(z) = MB(z) - MD(z)" +
					 "\ngde su MB i MD brojevi u intervalu od 0 do 1. Na meru poverenja utiču sve činjenice koje" +
					 "\nmogu potvrditi dati stav z, a na meru nepoverenja sve činjenice koje opovrgavaju dati stav z." + 
					 
					 "\n\n3)Pravila u sistemu moraju da budu tako strukturirana da bilo koje pravilo doprinosi poverenju ili" +
					 "\nnepoverenju u dati zaključak." +
					 "\nSvakom pravilu u sistemu se dodeljuje faktor izvesnosti koji se zasniva na ekspertskoj" +
					 "\nproceni i intuiciji-CF i komponenta faktora izvesnosti." + 
					 
					 "\n\nDa bi se takav sistem mogao simulirati potrebno je :" +
					 "\n1) definisati pravila sistema" +
					 "\n2) uneti faktori izvesnosti za sva opažanja sistema" +
					 "\n3) izabrati zaključak u sistemu čiji faktor izvesnosti želimo izračunati.\n" +
					 "\n\nSledeće: Kako definisati pravila..");
			
			centralnaPloca.add(jta);
			prethodno.setEnabled(false);
			sledece.setEnabled(true);
			break;
			
		case 1:
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                                           KAKO DEFINISATI PRAVILA:                                   \n" +
							"\nDefinisanje pravila podrazumeva njihovo unošenje u sistem. Pravila se unose pojedinačno.              " +
							"\nDa bi se pravilo unelo u sistem potrebno je pritisnuti taster 'Definisanje pravila' nakon  čega  se    " +
							"\npojavljuje prozor:"
					);
						
			centralnaPloca.add(jta);
			
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/definisanjeP.jpg"))));
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\nNa prozoru postoje tri dugmeta. To su dugme za dodavanje pravia 'Dodaj pravilo', dugme za izmenu      " +
							 "\npravila 'Izmeni pravilo' i dugme za brisanje pravila 'Nova pravila'.                                  " +
							 "\nUkoliko postoji bar jedno ranije uneto pravilo, moguće je pritisnuti sva tri dugmeta. U suprotnom,    " +
							 "\nmoguće je pritisnuti jedino dugme za dodavanje pravila.                                               "
					 );
			centralnaPloca.add(jta);
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\n\nPritiskom na dugme 'Dodaj pravilo' otvara se novi prozor koji ce nam poslužiti za unošenje pravila. " +
							 "\nPritiskom na dugme 'Izmeni pravilo' otvara se novi prozor koji ce nam poslužiti za izmenu pravila.    " +
							 "\nPri tome u tekst polje treba uneti broj pravila koje želimo da izmenimo." +
							 "\nPritiskom na dugme 'Nova pravila' brišu se sva pravila koja se trenutno nalaze u sistemu.             " +
							 "\n\n\n"
					);
			centralnaPloca.add(jta);
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\nPrethodno: Uvod u simulator..                                                                      " +
							"\nSledeće: Kako uneti pravilo..                                                                       "
					);
			centralnaPloca.add(jta);
			prethodno.setEnabled(true);
			sledece.setEnabled(true);
			
			break;
		case 2:
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                                           KAKO UNETI PRAVILO:                                        \n" +
							"\nPravilo se unosi pomoću prozora za unošenje pravila. Pre toga je porebno razumeti sintaksu pravila." + 
							"\nRadi lakšeg razumevanja dati su primeri pravila i gramatika prema kojoj su napisana."
							);
			centralnaPloca.add(jta);
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\nPrimer1: " +
							 "\nAKO pacijent_ima_natečeno_grlo I                 " +
							 "\npacijent_ima_kijavicu" +
							 "\nONDA (0.6) pacijent_ima_grip"
					);
			centralnaPloca.add(jta);
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\n\nPrimer2:" +
							 "\nAKO pacijent_ima_visoku_temperaturu I " +
							 "\n(pacijent_oseća_malaksalost ILI" +
							 "\npacijent_oseća_bolove_u_mišićima)" +
							 "\nONDA (0.7) pacijent_ima_grip"
					);
			centralnaPloca.add(jta);
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\nGramatika pravila je:\n" +
							"Pravilo = \"AKO\" Preduslov \" ONDA\" \"(\" FaktorI\")\" Zaključak\n" +
							"Preduslov = Ilst ILIopt\n" +
							"Ilst = DeoPred Iopt\n" +
							"ILIopt = \"ILI\" Ilist ILIopt\n" +
							"Iopt = \"I\" DeoPred Iopt\n" +
							"DeoPred = \"WORD\" | \"-\" \"WORD\" | \"(\" Preduslov \")\"\n" +
							"Zaključak = \"WORD\"\n"+
							"FaktorI = \"DOUBLE\"" +
							"\n\nNapomena: 'AKO', 'I', 'ILI' i 'ONDA' su ključne reči i moraju se uneti velikim slovima.               " +
							"\n           Znak '-' predstavlja negaciju pretpostavke."
					);
			centralnaPloca.add(jta);

			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\n\nPrethodno: Kako definisati pravila                                                                     \n" +
							 "Sledeće:Prozor za unošenje pravila.. "
					);
			centralnaPloca.add(jta);
			prethodno.setEnabled(true);
			sledece.setEnabled(true);
			break;
		case 3:
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                                           PROZOR ZA UNOŠENJE PRAVILA                                           ");				
			centralnaPloca.add(jta);
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/unosenjeP.jpg"))));
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\nKada unesete pravilo potvrdite na dugme 'Unesi pravilo'.                                              " +
							 "\nAko pogrešno unesete pravilo pojaviće se prozor sa porukom o greški koju ste napravili." +
							 "\nPravilno uneto pravilo se pojavljuje u listi pravila i može se videti u tekst polju predviđenom za to." +
							 "\nUneto pravilo se može kasnije izmeniti ili potpuno izbrisati." +
							 "\nKada ste završili sa unošenjem pravila zatvorite prozor."
					);			
			centralnaPloca.add(jta);
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\nPrethodno: Kako uneti pravilo..                                                                        \n" +
							 "Sledeće: Kako izmeniti pravilo.. "
					);
			centralnaPloca.add(jta);
			prethodno.setEnabled(true);
			sledece.setEnabled(true);
			break;
		case 4:
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                                          KAKO IZMENITI PRAVILO:                                        \n" +
							 "\nProzor za izmenu pravila je prikazan na slici:"
					);
			centralnaPloca.add(jta);
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/izmenaP.JPG"))));
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("Postupak izmene pravila je vrlo sličan postupku unošenja novog pravila. Jedna od razlika je u tome" +
							 "\nšto se u tekst polju već nalazi pravilo koje želimo izmeniti. Zatim, nakon unešenih izmena," +
							 "\n pritiskom na dugme 'Unesi pravilo' se ne unosi novo pravilo vec se menja postojece." +
							 "\nPored toga, postoji i dugme 'Izbriši pravilo' kojim se pravilo briše iz liste pravila unetih u simulator." +
							 "\nPrethodno: Prozor za unošenje pravila.." +
							 "\nSledeće: Kako definisati opažanja..");
			centralnaPloca.add(jta);
			prethodno.setEnabled(true);
			sledece.setEnabled(true);
			break;
		case 5:
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                                      KAKO DEFINISATI OPAŽANJA:                                        \n\n" +
							 "Kada smo završili unošenje pravila možemo započeti definisanje opažanja pritiskom na dugme \n" +
					 		 "'Definisanje opažanja'. Nakon toga se pojavljuje, za svako opažanje, po jedan prozor:\n");

			centralnaPloca.add(jta);
			
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/definisanjeO.JPG"))));
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\n\nRazmatra se svako opažanje posebno. Faktor izvesnosti, koji želimo da dodelimo opažanju, unosimo      \n" +
							"u tekst polje. Pritiskom na dugme 'Unesi faktor izvesnosti' ili na 'Enter' dodeljujemo opažanju\n" +
							"uneseni faktor izvesnosti. Posle toga nam se pojavljuje sledeći prozor za sledeće opažanje.\n" +
							"Napomena: Sva opažanja, po defoltu, imaju faktor izvesnosti jednak nuli.\n\n\n\n\n\n\n\n\n\n\n" +
							"Prethodno: Kako izmeniti pravilo..\n" +
							"Sledeće: Kako definisati zaključak.."
					);
			centralnaPloca.add(jta);
			prethodno.setEnabled(true);
			sledece.setEnabled(true);
			break;
		case 6:
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                                      KAKO DEFINISATI ZAKLJUČAK:                                       \n\n" +
							 "Kada smo završili unošenje pravila možemo započeti definisanje zaključka pritiskom na dugme \n" +
					 		 "'Definisanje zaključka'. Nakon toga se pojavljuje, za svaki zaključak, po jedan prozor:\n");
			centralnaPloca.add(jta);
			
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/definisanjeZ.JPG"))));
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\n\nRazmata se svaki zaključak posebno. Zaključak selektujemo pritiskom na dugme 'Izaberi zaključak'       \n" +
							"Ukoliko želimo da pređemo na sledeći zaključak to činimo pritiskom na dugme 'Sledeći zaključak'.\n" +
							"Trenutni zaključak je prikazan u tekst polju. U simulaciji se računa faktor izvesnosti izabranog zaključka.\n\n" +
							"Napomena: Zaključci se pojavljuju redosledom kojim su uneta pravila.\n\n\n\n\n\n\n\n\n\n" +
							
						
							"Prethodno: Kako definisati opažanja..\n" +
							"Sledeće: Kako pokrenuti simulaciju.."
					);
			centralnaPloca.add(jta);
			prethodno.setEnabled(true);
			sledece.setEnabled(true);
			break;
		case 7:
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\n                                            POKRETANJE SIMULACIJE:                         \n" +
							 "                                                                                             \n" +
							 "Kada ispunimo sve potrebne zahteve za pokretanje simulacije dobijamo mogućnost da pritisnemo \n" +
							 "dugme 'Na početak' čime pokrećemo simulaciju.");
			centralnaPloca.add(jta);
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/pokretanjeS.jpg"))));
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                  Ovaj set dugmadi se koristi i za pozicioniranje u simulaciji.                                                \n");
			centralnaPloca.add(jta);
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                  Nova simulacija se bira pritiskom na ikonicu 'Nova simulacija'                                              \n");
			centralnaPloca.add(jta);
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
					"files/icons/nova_sim.png"))));
			
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                  Izveštaj simulacije se dobija pritiskom na ikonicu 'Napravi izveštaj'                                       \n");
			centralnaPloca.add(jta);
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
					"files/icons/izvestaj.png"))));
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                  Ukoliko vam je potrebna pomoć u vezi rada simulatora pritisnite ikonicu 'Pomoć'                              \n");
			centralnaPloca.add(jta);
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
					"files/icons/pomoc.png"))));
			
		
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("                  Ukoliko su vam potrebna objašnjenja u vezi faktora izvesnosti pritisnite ikonicu 'Objašnjenja'               \n");
			centralnaPloca.add(jta);
			centralnaPloca.add(new JLabel(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/objasnjenja.png"))));
			
			
			jta = new JTextArea();
			jta.setBackground(Color.getColor(null));
			jta.setEditable(false);
			jta
					.setText("\n\n" +
							 "                  Prethodno: Kako definisati zaključak..                                                                       \n");
			centralnaPloca.add(jta);
			prethodno.setEnabled(true);
			sledece.setEnabled(false);
			break;
		default:
			throw new Greska("Pomoc nije dostupna!");
		}
		validate();
	}

}
